package com.winway.boot.security;


import cn.dev33.satoken.stp.StpInterface;
import com.winway.framework.unit.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义权限验证接口扩展
 */
@Slf4j
@Component
public class StpInterfaceImpl implements StpInterface {

    @Autowired
    private PermissionService permissionService;

    /**
     * 返回一个账号所拥有的权限码集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        Long userId = Long.parseLong(loginId.toString());
        log.debug("获取用户({})的权限列表", userId);

        try {
            // 默认权限处理（管理员拥有所有权限）
            List<String> permissions = new ArrayList<>();
            if (SecurityUtils.isAdmin(userId)) {
                permissions.add("*");
                return permissions;
            }

            permissions = permissionService.getPermissions(userId);


            return permissions;
        } catch (Exception e) {
            log.error("获取用户({})权限列表时发生错误: {}", userId, e.getMessage());
            return new ArrayList<>();
        }
    }

    /**
     * 返回一个账号所拥有的角色标识集合
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        Long userId = Long.parseLong(loginId.toString());
        log.debug("获取用户({})的角色列表", userId);

        try {

            // 默认角色处理（管理员拥有admin角色）
            List<String> roles = new ArrayList<>();
            if (SecurityUtils.isAdmin(userId)) {
                roles.add("admin");
                return roles;
            }

            roles = permissionService.getRoles(userId);

            return roles;
        } catch (Exception e) {
            log.error("获取用户({})角色列表时发生错误: {}", userId, e.getMessage());
            return new ArrayList<>();
        }
    }
}
